//
// Created by Administrator on 2021/11/11.
//

#include <stdio.h>
#include <stdlib.h>
//线性表的顺序表示
#define maxSize 100 //自定义线性表的最大长度
#define ElemType int //自定义Elemtype类型
typedef struct {
    ElemType data[maxSize]; //存储空间基址
    int length; //当前长度
} sqList; //顺序表的类型定义

/*插入操作*/
bool ListInsert(sqList &L, int i, ElemType e) {
    if (i < 1 || i > L.length + 1) {
        return false;
    }//判断插入位置是否合法
    if (L.length >= maxSize) {
        return false;
    }//判断顺序表能否继续插入
    for (int j = L.length; j >= i; j--) {
        L.data[j] = L.data[j - 1];//j--元素后移（从后往前）
    }
    L.data[i - 1] = e;//在位置i处放入数据e
    L.length++;//线性表长度+1
    return true;
}
/*最好情况：1
 * 最快情况：n
 * 平均情况：n*/

/*删除操作*/
//删除第i个位置的元素
bool ListDelete(sqList &L, int i, ElemType &e) {
    if (i < 1 || i > L.length + 1) {
        return false;
    }//判断插入位置是否合法
    e = L.data[i - 1];//将被删除的元素赋值给e
    for (int j = i; j < L.length; j++) {
        L.data[j - 1] = L.data[j];//将第i位置后面的元素前移
    }
    L.length--;//线性表长度-1
    return true;
}

/*按值查找*/
//查找线性表中第一个元素值=e的元素
int LocateElem(sqList L, ElemType e) {
    for (int i = 0; i < L.length; i++) {
        if (L.data[i] == e) {
            return i + 1;//返回查找到的位置i+1
        }
    }
    return 0;
}